// 管理当前用户的页面路由
// 路由信息分类
// 静态路由： 不需要登录就可以直接访问的路由
// 动态路由：  拥有权限才能访问的路由

// 得到静态路由信息
import {
  constantRoutes,
  syncRouter
} from '@/router/index'

// 在state中设置当前静态路由信息
const state = {
  //  当前用户的路由信息
  routes: constantRoutes
}

// 在 mutations中设置当前动态路由信息
const mutations = {
  // 设置动态路由
  SET_ROUTES(state, payload) {
    // payload动态路由
    state.routes = [...constantRoutes, ...payload]
  }
}

// 在actions中获取当前用户的动态路由，调用mutations中的SET_ROUTES
const actions = {
  set_routes(context, payload) {
    // 创建一个新的动态路由数组
    const newRoutes = []
    // 得到所有的动态路由：syncRouter
    // 得到当前用户的权限列表：payload
    // 根据权限列表去动态路由找到所有匹配的路由：所有的路由信息就是当前用户的拥有的动态路由
    syncRouter.forEach(item => {
      const mypath = item.path.split('/')[1]
      // 判断路径在当前用户的权限列表中是否存在
      if (payload.includes(mypath)) {
        newRoutes.push(item)
      }
    });
    // 调用 mutations 中的方法，来保存动态路由
    context.commit('SET_ROUTES', newRoutes)
    // 埋下一个伏笔（后面会用到）
    return newRoutes
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
